home *** CD-ROM | disk | FTP | other *** search
- /* $Id: m-model.c,v 1.4 1993/04/28 15:25:01 jan Exp $
-
- Copyright (c) 1991 Jan Wielemaker. All rights reserved.
- jan@swi.psy.uva.nl
-
- Purpose: Determine machines memory-model
- */
-
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- This program was written to determine the memory model of your
- machine. It may be used when writing a new md-machine.h file.
-
- Compile this file using:
-
- % cc -o m-model m-model.c
- % ./m-model
- Memory layout:
-
- Text at 0x2290
- Global variable at 0x40d0
- Local variable at 0xeffff938
- malloc() at 0x61a0
- C-Stack grows Downward
-
- No special declarations needed in "md.h"
-
- %
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
- #include <stdio.h>
-
- #define K * 1024
- #define MAX_DECL 100
-
- int global_var;
-
- char *
- sub()
- { char buf[10];
-
- return buf;
- }
-
- main(argc, argv)
- int argc;
- char *argv[];
- { char buf[10];
- unsigned long gva = (unsigned long) &global_var;
- int stack_up = (sub() > buf);
- char *decl[MAX_DECL];
- int ndecl = 0;
-
- printf("Memory layout:\n\n");
- printf("\tText at 0x%x\n", sub);
- printf("\tGlobal variable at 0x%x\n", gva);
- printf("\tLocal variable at 0x%x\n", buf);
- printf("\tmalloc() at 0x%x\n", malloc(10));
- printf("\tC-Stack grows %sward\n", stack_up ? "Up" : "Down");
-
- if ( (gva & 0xf0000000L) == 0x40000000L )
- decl[ndecl++] = "#define O_DATA_AT_0X4 1";
- else if ( (gva & 0xf0000000L) == 0x20000000L )
- decl[ndecl++] = "#define O_DATA_AT_0X2 1";
- else if ( (gva & 0xf0000000L) == 0x10000000L )
- decl[ndecl++] = "#define O_DATA_AT_0X1 1";
- else if ( (gva & 0xf0000000L) )
- printf("PROBLEM: Memory model not supported; see \"pl-incl.h\"\n");
-
- if ( stack_up )
- decl[ndecl++] = "#define O_C_STACK_GROWS_UP 1";
- if ( (long) sub > 64 K )
- decl[ndecl++] = "#define O_VMCODE_IS_ADDRESS 0";
-
- if ( !malloc(200000) )
- printf("PROBLEM: malloc(200000) fails; see \"pl-os.c\"\n");
-
- if ( ndecl > 0 )
- { int n;
-
- printf("\nRequired declarations in \"md.h\":\n\n");
- for(n=0; n<ndecl; n++)
- printf("%s\n", decl[n]);
- } else
- printf("\nNo special declarations needed in \"md.h\"\n\n");
-
- exit(0);
- }
-